/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

package org.apache.iceberg.util;

import org.apache.iceberg.AssertHelpers;
import org.junit.Assert;
import org.junit.Test;

public class TestLocationUtil {

  @Test
  public void testStripTrailingSlash() {
    String pathWithoutTrailingSlash = "s3://bucket/db/tbl";
    Assert.assertEquals("Should have no trailing slashes", pathWithoutTrailingSlash,
        LocationUtil.stripTrailingSlash(pathWithoutTrailingSlash));

    String pathWithSingleTrailingSlash = pathWithoutTrailingSlash  + "/";
    Assert.assertEquals("Should have no trailing slashes", pathWithoutTrailingSlash,
        LocationUtil.stripTrailingSlash(pathWithSingleTrailingSlash));

    String pathWithMultipleTrailingSlash = pathWithoutTrailingSlash  + "////";
    Assert.assertEquals("Should have no trailing slashes", pathWithoutTrailingSlash,
        LocationUtil.stripTrailingSlash(pathWithMultipleTrailingSlash));

    String pathWithOnlySlash = "////";
    Assert.assertEquals("Should have no trailing slashes", "",
        LocationUtil.stripTrailingSlash(pathWithOnlySlash));
  }

  @Test
  public void testStripTrailingSlashWithInvalidPath() {
    String [] invalidPaths = new String[] {null, ""};

    for (String invalidPath : invalidPaths) {
      AssertHelpers.assertThrows("path must be valid", IllegalArgumentException.class, "path must not be null or empty",
          () -> LocationUtil.stripTrailingSlash(invalidPath));
    }

  }
}
